package lesson4.example6;

import net.bytebuddy.ByteBuddy;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.matcher.ElementMatchers;

// Byte Buddy不支持修改已有方法内的代码，例如删除一行代码这种需求是无法通过Byte Buddy来实现的
public class TestByteBuddy {
	public static void main(String[] args) throws Exception {
		
		// 流式编程风格
        TestDemo td = new ByteBuddy()
        		// 动态生成TestDemo类的子类
                .subclass(TestDemo.class)
                // 拦截所有方法
                .method(ElementMatchers.any())
                // 使用LoggerAdvisor类作为拦截器，相当指明了Advice是一个切面
                .intercept(Advice.to(LoggerAdvisor.class))
                .make()  // 创建出TestDemo类的子类
                .load(TestDemo.class.getClassLoader()) // 加载TestDemo类的子类
                .getLoaded()
                .newInstance();
        
        td.bar(0);
        td.foo(1);
    }

}
